1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  import javax.management.MBeanInfo;
37  import javax.management.MBeanAttributeInfo;
38  import javax.management.MBeanOperationInfo;
39  import javax.management.MBeanParameterInfo;
40  import javax.management.MBeanNotificationInfo;
41  import javax.management.MBeanConstructorInfo;
42  
43  public class MustBeValidCommand {
44  
45      private static String[][] attributes = {
46          { "Attribute with valid identifiers",
47            "validType1","validNameAtt1" },
48          { "Attribute with invalid type",
49            "invalid-type",   "validNameAtt2" },
50          { "Attribute with invalid name", "valid.type2",
51            "invalid-name-att3" },
52          { "Attribute with invalid name and type",
53            "invalidtype[]","invalid.name.att4" }
54      };
55      private static String[][] constructors = {
56          { "Constructor with valid name",
57            "ValidConstructor1" },
58          { "Constructor with invalid name",
59            "invalid.Constructor2"},
60          { "Constructor with invalid name",
61            "invalid-constructor-3" },
62          { "Constructor with invalid name",
63            "invalid constructor" }
64      };
65      private static String[][] mbeanclasses = {
66          { "MBean with valid class name",
67            "ValidMBeanClass1" },
68          { "MBean with valid class name",
69            "valid.mbean.Class2" },
70          { "MBean with invalid class name",
71            "invalid.MBeanClass3[]"},
72          { "MBean with invalid class name",
73            "invalid-mbean-class-4" },
74          { "MBean with invalid class name",
75            "invalid mbean class 5" }
76      };
77      private static String[][] notificationclasses = {
78          { "Notification with valid class name",
79            "ValidNotificationClass1" },
80          { "Notification with valid class name",
81            "valid.notification.Class2" },
82          { "Notification with invalid class name",
83            "invalid.NotificationClass3[]"},
84          { "Notification with invalid class name",
85            "invalid-notification-class-4" },
86          { "Notification with invalid class name",
87            "invalid notification class 5" }
88      };
89      private static String[][] operations = {
90          { "Operation with valid identifiers",
91            "validType1","validNameOp1" },
92          { "Operation with invalid type",
93            "invalid-type",   "validNameOp2" },
94          { "Operation with invalid name", "valid.type2",
95            "invalid-name-op3" },
96          { "Operation with invalid name and type",
97            "invalidtype[]","invalid.name.op4" }
98      };
99      private static String[][] parameters = {
100         { "Parameter with valid identifiers",
101           "validType1","validNamePar1" },
102         { "Parameter with invalid type",
103           "invalid-type",   "validNamePar2" },
104         { "Parameter with invalid name", "valid.type2",
105           "invalid-name-par3" },
106         { "Parameter with invalid name and type",
107           "invalidtype[]","invalid.name.par4" }
108     };
109 
110     static private MBeanAttributeInfo[] makeAttInfos(String[][] spec) {
111         final MBeanAttributeInfo[] result =
112             new MBeanAttributeInfo[spec.length];
113         for (int i=0;i<result.length;i++) {
114             System.out.println("\tCreate an MBeanAttributeInfo: " +
115                                spec[i][0]);
116             final MBeanAttributeInfo item =
117                 new MBeanAttributeInfo(spec[i][2],spec[i][1],spec[i][0],
118                                        true,true,false);
119             result[i]=item;
120         }
121         return result;
122     }
123 
124     static private MBeanParameterInfo[] makeParInfos(String[][] spec) {
125         final MBeanParameterInfo[] result =
126             new MBeanParameterInfo[spec.length];
127         for (int i=0;i<result.length;i++) {
128             System.out.println("\tCreate an MBeanParameterInfo: " +
129                                spec[i][0]);
130             final MBeanParameterInfo item =
131                 new MBeanParameterInfo(spec[i][2],spec[i][1],spec[i][0]);
132             result[i]=item;
133         }
134         return result;
135     }
136 
137     static private MBeanOperationInfo[] makeOpInfos(String[][] spec) {
138         final MBeanOperationInfo[] result =
139             new MBeanOperationInfo[spec.length];
140         final MBeanParameterInfo[] pars = makeParInfos(parameters);
141         for (int i=0;i<result.length;i++) {
142             System.out.println("\tCreate an MBeanOperationInfo: " +
143                                spec[i][0]);
144             final MBeanOperationInfo item =
145                 new MBeanOperationInfo(spec[i][2],spec[i][0],pars,spec[i][1],
146                                        MBeanOperationInfo.ACTION_INFO);
147             result[i]=item;
148         }
149         return result;
150     }
151 
152     static private MBeanConstructorInfo[] makeCtorInfos(String[][] spec) {
153         final MBeanConstructorInfo[] result =
154             new MBeanConstructorInfo[spec.length];
155         final MBeanParameterInfo[] pars = makeParInfos(parameters);
156         for (int i=0;i<result.length;i++) {
157             System.out.println("\tCreate an MBeanConstructorInfo: " +
158                                spec[i][0]);
159             final MBeanConstructorInfo item =
160                 new MBeanConstructorInfo(spec[i][1],spec[i][0],pars);
161             result[i]=item;
162         }
163         return result;
164     }
165 
166     static private MBeanNotificationInfo[] makeNotifInfos(String[][] spec) {
167         final MBeanNotificationInfo[] result =
168             new MBeanNotificationInfo[spec.length];
169         final String[] types = {"valid.type","invalid-type"};
170         for (int i=0;i<result.length;i++) {
171             System.out.println("\tCreate an MBeanNotificationInfo: " +
172                                spec[i][0]);
173             final MBeanNotificationInfo item =
174                 new MBeanNotificationInfo(types,spec[i][1],spec[i][0]);
175             result[i]=item;
176         }
177         return result;
178     }
179 
180     public static void main(String[] args) throws Exception {
181         
182         
183         final MBeanAttributeInfo[]    atts   = makeAttInfos(attributes);
184         final MBeanConstructorInfo[]  ctors  = makeCtorInfos(constructors);
185         final MBeanOperationInfo[]    ops    = makeOpInfos(operations);
186         final MBeanNotificationInfo[] notifs =
187             makeNotifInfos(notificationclasses);
188 
189         for (int i=0; i<mbeanclasses.length;i++) {
190             System.out.println("Create an MBeanInfo: " + mbeanclasses[i][0]);
191             final MBeanInfo mbi =
192                 new MBeanInfo(mbeanclasses[i][1],mbeanclasses[i][0],
193                               atts, ctors, ops, notifs);
194         }
195 
196         
197         
198         System.out.println("All MBeanInfo successfuly created!");
199         System.out.println("Bye! Bye!");
200     }
201 }